Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / backend / reticulum_config_guard.py

Displaying Raw • Download


meshchatx/src/backend/reticulum_config_guard.py 415abdb00a932473a2ffaf53f6b8fcaa6b0605ac (415abdb0) Text, 2.84 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""Reticulum config file validation helpers for startup repair."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787logging
Tff7b72import T7ee787os
Tff7b72import T7ee787shutil
Tff7b72import T7ee787time

Te6edf3logger Tff7b72= Te6edf3loggingTff7b72.Td2a8ffgetLoggerTb4b4b4(Tff7b72__name__Tb4b4b4)


Tff7b72def Td2a8ffreticulum_config_has_required_sectionsTb4b4b4(Te6edf3config_pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3config_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3config_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3content Tff7b72= Te6edf3handleTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Ta5d6ff"Ta5d6ff[reticulum]Ta5d6ff" Tff7b72in Te6edf3content Tff7b72and Ta5d6ff"Ta5d6ff[interfaces]Ta5d6ff" Tff7b72in Te6edf3content


Tff7b72def Td2a8ffreticulum_config_is_parseableTb4b4b4(Te6edf3config_pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3config_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72from T7ee787RNST7ee787.T7ee787vendorT7ee787.T7ee787configobj Tff7b72import Te6edf3ConfigObj

Te6edf3cfg Tff7b72= Te6edf3ConfigObjTb4b4b4(Te6edf3config_pathTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Tffa657isinstanceTb4b4b4(Te6edf3cfgTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffreticulumTa5d6ff"Tb4b4b4)Tb4b4b4, Tffa657dictTb4b4b4) Tff7b72and Tffa657isinstanceTb4b4b4(
Te6edf3cfgTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4)Tb4b4b4,
Tffa657dictTb4b4b4,
Tb4b4b4)


Tff7b72def Td2a8ffbackup_reticulum_config_fileTb4b4b4(Te6edf3config_pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3config_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Te6edf3stamp Tff7b72= Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Ta5d6ff"Ta5d6ff%Ta5d6ffYTa5d6ff%Ta5d6ffmTffd700%dTa5d6ff-Ta5d6ff%Ta5d6ffHTa5d6ff%Ta5d6ffMTa5d6ff%Ta5d6ffSTa5d6ff"Tb4b4b4)
Te6edf3backup_path Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3config_pathTffd700}Ta5d6ff.corrupt.Tffd700{Te6edf3stampTffd700}Ta5d6ff"
Tff7b72tryTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffcopy2Tb4b4b4(Te6edf3config_pathTb4b4b4, Te6edf3backup_pathTb4b4b4)
Tff7b72except Tf85149OSError Tff7b72as Te6edf3excTb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffwarningTb4b4b4(
Ta5d6ff"Ta5d6ffFailed to back up corrupt Reticulum config Tffd700%sTa5d6ff: Tffd700%sTa5d6ff"Tb4b4b4, Te6edf3config_pathTb4b4b4, Te6edf3exc
Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72return Te6edf3backup_path


Tff7b72def Td2a8ffrepair_unparseable_reticulum_configTb4b4b4(Te6edf3config_pathTb4b4b4: Tffa657strTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3write_defaultTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""Back up and rewrite *config_path* when ConfigObj cannot parse it.

*write_default* must be a callable accepting the config path and writing
stock RNS defaults (``ReticulumMeshChat._write_rns_reticulum_default_config_file``).

Returns True when the file was replaced.
"""
Tff7b72if Tff7b72not Te6edf3reticulum_config_has_required_sectionsTb4b4b4(Te6edf3config_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72if Te6edf3reticulum_config_is_parseableTb4b4b4(Te6edf3config_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False

Te6edf3backup_path Tff7b72= Te6edf3backup_reticulum_config_fileTb4b4b4(Te6edf3config_pathTb4b4b4)
Tff7b72if Te6edf3backup_pathTb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffwarningTb4b4b4(
Ta5d6ff"Ta5d6ffReticulum config at Tffd700%sTa5d6ff is unparseable; backed up to Tffd700%sTa5d6ff"Tb4b4b4,
Te6edf3config_pathTb4b4b4,
Te6edf3backup_pathTb4b4b4,
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffwarningTb4b4b4(
Ta5d6ff"Ta5d6ffReticulum config at Tffd700%sTa5d6ff is unparseable; rewriting without backupTa5d6ff"Tb4b4b4,
Te6edf3config_pathTb4b4b4,
Tb4b4b4)

Te6edf3write_defaultTb4b4b4(Te6edf3config_pathTb4b4b4)
Tff7b72return Tff7b72True


Tff7b72def Td2a8ffensure_safe_reticulum_runtime_flagsTb4b4b4(Te6edf3config_pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""Force runtime flags that keep MeshChatX alive when interfaces fail.

Currently forces ``panic_on_interface_error = No`` so RNS does not call
``os._exit`` on interface faults.
"""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787rns_startup_recovery Tff7b72import Tb4b4b4(
Te6edf3ensure_panic_on_interface_error_disabledTb4b4b4,
Tb4b4b4)

Tff7b72return Te6edf3ensure_panic_on_interface_error_disabledTb4b4b4(Te6edf3config_pathTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────